package com.rn.simple.loader;

/**
 * Description：热插拔类加载器
 * 为了多次载入执行类而加入的加载器
 * 把defineClass方法开放出来，只有外部显式调用的时候才会使用到loadByte方法
 * 由虚拟机调用时，仍然按照原有的双亲委派规则使用loadClass方法进行类加载
 *
 * @author rannuo
 * @date 2019/12/7
 */
public class HotSwapClassLoader extends ClassLoader {

    public HotSwapClassLoader() {
        super(HotSwapClassLoader.class.getClassLoader());
    }

    /**
     * 公开父类（即 java.lang.ClassLoader）中的protected方法defineClass()，使用这个方法把提交执行的 ava类的byte[]数组转变为Class对象
     *
     * @param classByte
     * @return
     */
    public Class loadByte(byte[] classByte) {
        return defineClass(null, classByte, 0, classByte.length);
    }
}
